/*
 * Copyright (c) 2018 Baidu, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.baidubce.formula.consul.config.spring.boot.auth;

import com.baidubce.formula.consul.config.spring.boot.BmsCommonInterceptor;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.lang.Nullable;

import java.io.IOException;

/**
 * @author luoguangming
 */
public class BmsAuthorizationInterceptor implements ClientHttpRequestInterceptor {

    private final String appName;

    private final String platformName;

    private final String paasType;

    /**
     * Create a new interceptor which adds a BASIC authorization header
     */
    public BmsAuthorizationInterceptor(@Nullable String appName, @Nullable String platformName,
                                       @Nullable String paasType) {
        this.appName = (appName != null ? appName : "");
        this.platformName = (platformName != null ? platformName : "");
        this.paasType = (paasType != null ? paasType : "");
    }

    public BmsAuthorizationInterceptor() {
        this.appName = System.getenv("EM_APP");
        this.platformName = System.getenv("EM_PLATFORM");
        this.paasType = System.getenv("EM_PAAS_TYPE");
    }

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body,
                                        ClientHttpRequestExecution execution) throws IOException {
        request.getHeaders().add("X-BMS-APP-NAME", this.appName);
        request.getHeaders().add("X-BMS-PAAS-TYPE", this.paasType);
        request.getHeaders().add("X-BMS-PLATFORM-NAME", this.platformName);

        // add api version to header
        request.getHeaders().add("X-BMS-API-VERSION", BmsCommonInterceptor.VERSION);

        return execution.execute(request, body);
    }

}
